iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

你有沒有想過,為什麼駭客能把一串亂七八糟的加密內容慢慢還原出明文?

其實,很多時候靠的就是一些簡單的數學運算。

在密碼學裡,有一個特別常見的小技巧,叫做xor,雖然很基礎但在很多題目中都會被使用到

今天就來學關於xor的運算以及他的特性吧!

什麼是XOR?

XOR(Exclusive OR 異或)是一種邏輯運算,常用於密碼學和資料處理

運算規則是:兩個輸入位相同時,結果為0;兩個輸入位不同時,結果為1

在程式語言中,它通常用符號 ^ 表示

https://ithelp.ithome.com.tw/upload/images/20250902/20169105qhmtvxdQbj.png

真值表:相同為 0,不同為 1

https://ithelp.ithome.com.tw/upload/images/20250902/20169105r6sVwD90eZ.png

XOR特性

Commutative (交換率):無論左右順序怎麼調換,結果都一樣:A ⊕ B = B ⊕ A
Associative (結合率):運算的先後順序不影響最終結果:A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
Identity (恆等律):和 0 做 XOR,不會改變原本的數值:A ⊕ 0 = A
Self-Inverse (自反律):一個數和自己做 XOR,結果一定是 0:A ⊕ A = 0
Double Application (雙重應用):如果將相同的數字進行兩次 XOR,會回到原始數值:(A ⊕ B) ⊕ B = A

了解完他的特性之後就來看看題目會怎麼運用吧

picoCTF - vault-door-6

這題我們主要要看的是以下檢查密碼的程式,這邊他會讀取我們的輸入作為password,然後將password每位元跟0x55做xor再去跟myBytes比對一不一樣

public boolean checkPassword(String password) {
        if (password.length() != 32) {
            return false;
        }
        byte[] passBytes = password.getBytes();
        byte[] myBytes = {
            0x3b, 0x65, 0x21, 0xa , 0x38, 0x0 , 0x36, 0x1d,
            0xa , 0x3d, 0x61, 0x27, 0x11, 0x66, 0x27, 0xa ,
            0x21, 0x1d, 0x61, 0x3b, 0xa , 0x2d, 0x65, 0x27,
            0xa , 0x6c, 0x61, 0x6d, 0x37, 0x6d, 0x6d, 0x6d,
        };
        for (int i=0; i<32; i++) {
            if (((passBytes[i] ^ 0x55) - myBytes[i]) != 0) {
                return false;
            }
        }
        return true;
    }

(這裡(((passBytes[i] ^ 0x55) - myBytes[i]) != 0) 其實就是((passBytes[i] ^ 0x55) == myBytes[i]) )

了解了他的邏輯,我們可以運用前面說到的「將相同的數字進行兩次 XOR,會回到原始數值」的特性來解出我們的password

密碼 xor 0x55 = myBytes ⮕ 密碼 xor 0x55 xor 0x55 = myBytes xor 0x55 = 密碼

手算太慢了寫個python腳本來算吧~

myBytes = [
0x3b, 0x65, 0x21, 0x0a, 0x38, 0x00, 0x36, 0x1d,
0x0a, 0x3d, 0x61, 0x27, 0x11, 0x66, 0x27, 0x0a,
0x21, 0x1d, 0x61, 0x3b, 0x0a, 0x2d, 0x65, 0x27,
0x0a, 0x6c, 0x61, 0x6d, 0x37, 0x6d, 0x6d, 0x6d,
]
password = "".join(chr(b ^ 0x55) for b in myBytes)
print(password)

運行之後就得到這題的flag啦~


今天就介紹到這邊啦~希望大家都有了解今天的內容,明天將會從凱薩密碼開始講起!
想看更多,記得明天再來喔~


上一篇
Day 6 - python
系列文
一天一題picoCTF:從Easy開始的新手生活7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言